package BookManage;

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 强仔
 * Date: 2022-01-16
 * Time: 12:01
 */


//通过这个类，把数据库的连接操作给封装一下
public class DBUtil {
    private static String url = "jdbc:mysql://127.0.0.1:3306/bookmanage?characterEncoding=utf8&useSSL=false";
    private static String user = "root";
    private static String password = "cuige2001";

    //一个程序中只要有一个连接即可，有一个DataSource实例即可！
    //保证 某个类在程序中只有 “唯一的实例”（可以有多种不同的实例，每种实例只有一个啊），叫做"单例模式"，也是一种设计模式
    private static DataSource dataSource = new MysqlDataSource();

    //静态代码块，"类加载"的时候执行
    static{
        ((MysqlDataSource)dataSource).setUrl(url);
        ((MysqlDataSource)dataSource).setUser(user);
        ((MysqlDataSource)dataSource).setPassword(password);
    }

    //建立连接
    public static Connection getConnection() throws SQLException {
        return dataSource.getConnection();
    }

    public static void close(Connection connection, Statement statement, ResultSet resultSet) {

// TODO 用一层 try catch() 包裹是不行的 ！！！ 如果 resultSet发生异常的话，statement和connection的资源不会回收哦
//        try{
//            if(resultSet != null){
//                resultSet.close();
//            }
//            if(statement != null){
//                statement.close();
//            }
//            if(connection != null){
//                connection.close();
//            }
//        }catch(SQLException e){
//            e.printStackTrace();
//        }


        if(resultSet != null){
            try {
                resultSet.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(statement != null){
            try {
                statement.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(connection != null){
            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}
